package com.myblog.controller;


import com.myblog.common.lang.Result;
import com.myblog.entity.User;
import com.myblog.service.IUserService;
import org.apache.shiro.authz.annotation.RequiresAuthentication;
import org.apache.shiro.authz.annotation.RequiresUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author 沉梦听雨
 * @since 2023-03-25
 */
@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private IUserService userService;

    /*
        @RequiresAuthentication是Shiro框架中的注解之一，用于标注需要进行身份验证的方法或类。
        当使用该注解时，如果当前用户未经过身份验证，则会被重定向到登录页面或抛出未经授权的异常。
        通常与@RequiresUser、@RequiresRoles和@RequiresPermissions等注解一起使用，用于实现Shiro的访问控制功能。
    */
    @RequiresAuthentication
    @GetMapping("/index")
    public Result index() {
        User user = userService.getById(1L);
        return Result.succ(user);
    }

    /*
        使用@Validated注解方式，如果实体不符合要求，系统会抛出异常，
        那么我们的异常处理中就捕获到MethodArgumentNotValidException
    */
    @PostMapping("/save")
    public Result save(@Validated @RequestBody User user) {
        userService.save(user);
        return Result.succ(user);
    }
}
